package com.zengqingfa.examples.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zengqingfa.examples.mybatisplus.annotation.FieldPermission;
import com.zengqingfa.examples.mybatisplus.annotation.FieldPermission2;
import com.zengqingfa.examples.mybatisplus.dto.UserQueryVo;
import com.zengqingfa.examples.mybatisplus.entity.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * @fileName: UserMapper
 * @author: zengqf3
 * @date: 2020-8-1 14:12
 * @description:
 */

public interface UserMapper extends BaseMapper<User> {

    /**
     * 分页查询1
     *
     * @return
     */
    IPage<User> selectUserPage1(Page<User> page, @Param("name") String name);

    /**
     * 分页查询2
     *
     * @return
     */
    IPage<User> selectUserPage2(Page<User> page, @Param("user") User user);

    /**
     * 通过id查询
     * @param id
     * @return
     */
    User queryById(@Param("id") Long id);

    /**
     * 通过id查询
     * @param id
     * @return
     */
    @Select("select * from user where id =#{id}")
    User selectById(@Param("id") Long id);

    /**
     * 通过id查询上一条记录
     *
     * @return
     */
    @Select("select * from user where id =#{id} order by create_time desc limit 1,1")
    User selectPreviousRecordById(@Param("id") Long id);

    /**
     * 查询测试sql 注入
     * @param userName
     * @return
     */
    List<User> selectByUserNameSqlInject(@Param("name") String userName);

    /**
     * 分页
     * @param page
     * @param user
     * @return
     */
    IPage<Map> selectUserPageSpliceSql(Page<Map> page,  @Param("user") UserQueryVo user);


    /**
     * 分页
     * @param page
     * @param user
     * @return
     */
    IPage<User> selectUserPageWithJsonSerialized(Page<User> page, @Param("user") UserQueryVo user);

    /**
     * 分页
     * @param page
     * @param user
     * @return
     */
    IPage<User> selectUserPageWithAnnotation(Page<User> page, @Param("user") UserQueryVo user);

    /**
     * 列表
     * @param user
     * @return
     */
    List<Map> selectUserListWithAnnotation( @Param("user")UserQueryVo user);

    /**
     * 分页
     * @param page
     * @param user
     * @return
     */
    @FieldPermission
    IPage<User> selectUserPageWithModifyColumn(Page<User> page,  @Param("user")UserQueryVo user);

    /**
     * 分页
     * @param page
     * @param user
     * @return
     */
    @FieldPermission2
    IPage<User> selectUserPageWithModifyResultSet(Page<User> page, UserQueryVo user);
}
